/*************************************
 * 
 * @file GxImageGadgetPrivate.h
 * @brief 桌面图片挂件私有类
 * @author H00015
 * @date 2022-03-29 09:23:12
 * @note 提供不需要外部公开的、仅对内部使用的方法和变量
 * 
 *************************************/

#ifndef HIMAGEGADGETPRIVATE_H
#define HIMAGEGADGETPRIVATE_H

#include <QObject>
#include <QFileInfo>
#include <QList>
#include <QPixmap>

#include "def.h"

class GxImageGadget;
class GxImageOperator;
class QThread;
class GxImageSetting;
class QSystemTrayIcon;
class QTimeLine;
class GxResizeProc;

class GxImageGadgetPrivate : public QObject
{
    Q_OBJECT
    Q_DECLARE_PUBLIC(GxImageGadget)

public:
    explicit GxImageGadgetPrivate(GxImageGadget *obj);
    ~GxImageGadgetPrivate();
    

public Q_SLOTS:
    //设置幻灯片间隔，秒
    void setSlideShowInterval(int interval);

    //添加一个目录，默认不递归
    void addDir(const QString& dir);
    //移除一个目录
    void removeDir(const QString& dir);

    //下一张
    void goNext();
    //上一张
    void goPrevious(); 
    //停止，resetimage:是否重置当前图片
    Q_INVOKABLE void stop(bool resetimage=false);
    //true:播放
    //false:暂停
    Q_INVOKABLE void start();

protected:
    virtual bool eventFilter(QObject *watched, QEvent *event) override;

private:
    //初始化托盘去
    void initTray();

    //初始化数据库
    void initDB();

    //具体绘制函数
    void draw();
    
    //计算图片应绘制区域
    QRect calcTargetRect(const QRect &rect) const;

    //当前显示的图片
    Q_INVOKABLE void setCurrentImage(const QString& strImage);

    //生成维护贴图
    void genMaintancePixmap();

    //重置因为移动导致的维护状态显示
    //延迟deltamsecs毫秒，默认500毫秒
    void resetMaintainByMoving(int deltamsecs=500);

    //适配翻译，重新设置文字
    void reTranslate();

private Q_SLOTS:
    //重置维护状态
    void setMaintainToFalse();

    //打开配置界面
    void openSetting();

    //播放控制菜单的处理
    //checked表示暂停状态
    //uncheck表示播放状态
    void slotPlayActionTrigerred(bool bState);

    //解锁锁定菜单的处理
    void slotLockActionTriggered();

    //重置位置
    void slotResetGeometry();

Q_SIGNALS:
    void signalSendContent(DBOperationInfo);

private:
    GxImageGadget* q_ptr;
    //比例规则
    RatioRule m_ratioRule;  
    //尺寸规则
    SizeRule m_sizeRule;    
    //幻灯片模式
    SlideMode m_slideMode;
    //管理图片目录
    QList<QFileInfo> m_listDirs;
    //当前图片
    QPixmap *m_pCurrentImage;

    //切换间隔,单位秒
    int m_interval;   
    //切换幻灯片计时器id
    //int m_iTimerId;
    QTimeLine *m_pTimer;

    //图片库
    GxImageOperator *m_pWorker;
    QThread *m_pThread;

    //设置界面
    GxImageSetting *m_pSetting;

    //是否处于修改状态
    bool m_bInMaintance;
    //维护状态专用的贴图
    QPixmap m_pixmapForMaintanceCorner;
    QPixmap m_pixmapForMaintanceBg;

    //托盘区图标
    QSystemTrayIcon *m_pTray;
    QAction *m_pActionPlay;
    QAction *m_pActionLock;
    QAction *m_pActionUnlock;
    QAction *m_pActionPanelOn;
    QAction *m_pActionPanelOff;
    QAction *m_pActionSetting;
    QAction *m_pActionExit;

#if SHOW_PROGRESS_BAR
    //进度条区域
    QRect m_rectProgress;
#endif

    //负责处理拖动
    GxResizeProc *m_pResizeProc;

    friend class GxImageOperator;
};

#endif // HIMAGEGADGETPRIVATE_H
